基于K8s的CI/CD自动化持续集成部署框架 您所在的位置:网站首页 常用的cicd工具 适应于k8s 基于K8s的CI/CD自动化持续集成部署框架

基于K8s的CI/CD自动化持续集成部署框架

#基于K8s的CI/CD自动化持续集成部署框架| 来源: 网络整理| 查看: 265

文章目录 什么是CI/CD?1 环境准备2 组件部署2.1 jenkins快速部署2.2 gitlab快速部署2.3 harbor快速部署 3 CI/CD交付

什么是CI/CD?

CI/CD即持续集成与持续交付持续部署。 持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。

参考文章:什么是 CI/CD

CI/CD流程图 在这里插入图片描述 本文将使用GitLab+Jenkins+Kubernetes来实现CI/CD的简单自动化发布场景

1 环境准备

确保各个节点服务器防火墙、selinux都关闭,做好域名解析

10.0.0.200 master01 jenkins.rsq.com 10.0.0.201 node01 10.0.0.202 node02 10.0.0.203 gitlab.rsq.com 10.0.0.204 store.rsq.com 2 组件部署 2.1 jenkins快速部署

可以考虑helm部署,也可以单机部署,这里我选择了单机部署,比较方便一点 1、yum安装jenkins

# 配置jenkins源 wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # yum安装jenkins和java环境 yum install jenkins java java-1.8.0-openjdk-devel -y

2、修改配置

vim /etc/sysconfig/jenkins # 监听端口 JENKINS_PORT="8080" # 为了不因为权限出现各种问题,这里直接使用root用户 $JENKINS_USER="root" # 修改目录权限 chown -R root:root /var/lib/jenkins chown -R root:root /var/cache/jenkins chown -R root:root /var/log/jenkins # 启动jenkins systemctl start jenkins

在这里插入图片描述

2.2 gitlab快速部署

之前有用过helm部署gitlab-ce,但是发现被废弃了,里边deployment的apiVersion还是extensions/v1beta1,跟现有deployment的apps/v1不相符,若要使用还需要修改postgresql和redis chart的deployment文件,添加selector字段,遂放弃。

1、点击下方下载链接选择所需要的gitlab-ce版本rpm包

单机下载路径

2、安装gitlab-ce

# 安装依赖文件 yum -y install policycoreutils openssh-server openssh-clients postfix # 获取rpm包并安装 wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm rpm -ivh gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm # 修改gitlab配置文件指定服务器ip和自定义端口 vim /etc/gitlab/gitlab.rb external_url 'http://gitlab.rsq.com' # 注意这里设置的端口不能被占用,默认是80端口,如果80已经使用则需要替换成其它端口 # 重置配置并启动gitlab gitlab-ctl reconfigure # 第一次执行时间会久一点 gitlab-ctl restart # 出现全部 ok: run: 即代表gitlab启动成功

显示如下界面即成功 在这里插入图片描述 创建一个项目供代码push上传 在这里插入图片描述 名字自定义 在这里插入图片描述 在客户端即K8s主节点上配置ssh-key免密钥登录

# 这里的-C指定我们gitlab中创建的邮箱账号 ssh-keygen -t rsa -C "[email protected]" # 然后拷贝 ~/.ssh/id_rsa.pub 公钥至gitlab中

在这里插入图片描述 找到SSH Keys 在这里插入图片描述 在K8s主节点上创建代码仓库

[root@master01 ~]# mkdir /home/rsq/www [root@master01 ~]# cd /home/rsq/www [root@master01 www]# git init Initialized empty Git repository in /home/rsq/www/.git/ [root@master01 www]# git remote add origin [email protected]:rsq/www.git [root@master01 www]# git add . [root@master01 www]# git commit -m "init" [root@master01 www]# git push -u origin master The authenticity of host 'gitlab.rsq.com (10.0.0.205)' can't be established. ECDSA key fingerprint is SHA256:Yg2SX+FS7+aEFjqCu5g4h4g98RVBacG3a669M8Bw8eA. ECDSA key fingerprint is MD5:f5:cb:69:36:63:3d:92:da:c7:4d:7b:d7:df:ba:dc:e0. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'gitlab.rsq.com,10.0.0.205' (ECDSA) to the list of known hosts. Counting objects: 3, done. Writing objects: 100% (3/3), 237 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://[email protected]/rsq/www.git * [new branch] master -> master Branch master set up to track remote branch master from origin.

参考文章:

centos7安装部署gitlab服务器

2.3 harbor快速部署

1、获取harbor安装包

# 进入github选择harbor所需release版本,我这里用的v1.7.4 # 下载包有点慢 https://github.com/goharbor/harbor/releases # 解压缩至/usr/local/目录下 tar -xf harbor-offline-installer-v1.7.4.tgz -C /usr/local/

2、修改harbor配置文件

vim /usr/local/harbor/harbor.cfg hostname = store.rsq.com harbor_admin_password = Harbor12345 # 初始密码 db_password = root123 # 数据库初始密码

3、安装之前需要用pip3安装compose-harbor,否则会报错

# yum安装pip yum -y install epel-release yum install python3-pip # 更新国内pip源 mkdir ~/.pip/ vim ~/.pip/pip.conf [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com # 安装docker-compose pip3 install docker-compose

4、安装harbor

cd /usr/local/harbor ./install.sh 3 CI/CD交付

在这里插入图片描述 接下来会按照上图一步一步操作,当我们往gitlab上push代码后,会自动触发Jenkins的构建,这个是在gitlab上设置实现的。 jenkins中创建一个pipeline 在这里插入图片描述 在这里插入图片描述 gitlab中调试 在这里插入图片描述 添加完Webhook之后可以进行测试 在这里插入图片描述 若通过,既可进行下一步构建代码,不过这里就不演示如何进行构建,直接贴上代码 一个CI/CD简单的groovy脚本

#!groovy pipeline { agent any environment { REPOSITORY="ssh://[email protected]:2222/tom/gocode.git" MODULE="user-edge-service" // 要更新的pod名字 SCRIPTS_PATH="/home/rsq/scripts" // 脚本都在这里执行 } stages { stage('获取代码') { steps { echo "start fetch code from git:${REPOSITORY}" deleteDir() git "${REPOSITORY}" } } stage('静态分析') { steps { echo "start code check." } } stage('编译+单元测试') { steps { echo "start complie" sh "mvn -U -pl ${MODULE} -am clean package" } } stage('构建镜像') { steps { echo "start build image" sh "${SCRIPTS_PATH}/build-images.sh ${MODULE}" } } stage('发布系统') { steps { echo "start deploy" sh "${SCRIPTS_PATH}/deploy.sh user-service-deployment ${MODULE}" } } } }

在K8s主节点的/home/rsq/scripts目录下创建如下两个bash脚本,供jenkins调用执行 build-images.sh

#!/bin/bash MODULE=$1 TIME=`date "+%Y%m%d%H%M"` GIT_REVERSION=`git log -1 --pretty=format:"%h"` IMAGE_NAME=hub.rsq.com:8080/micro-service/${MODULE}:${TIME}-${GIT_REVERSION} cd ${MODULE} # 编译镜像 docker build -t ${IMAGE_NAME} . cd - # 推送代码 docker push ${IMAGE_NAME} # 把镜像名字写入文件,供脚本获取使用 echo ${IMAGE_NAME} > IMAGE_NAME

deploy.sh

#!/bin/bash IMAGE=`cat IMAGE_NAME` DEPLOYMENT=$1 MODULE=$2 echo "update image to:${IMAGE}" kubectl set image deployments/${DEPLOYMENT} ${MODULE}=${IMAGE}

最后可以实现每当往gitlab中进行一次push代码的操作,gitlab就会自动触发webhook操作,直到完成持续部署,代码上线,这样就实现了一个简单的CI/CD流程,但是静态分析的代码需要自己根据实际代码去编写。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有